OpenVPN હૂક ઘટનાઓ: નામ અને સમયછાપ કેમ ચાવી નથી
ડિસ્કનેક્ટ હૂક જોડાણનો સમય જણાવે છે, ડિસ્કનેક્ટનો સમય નહીં. વપરાશકર્તાનામ સાથે જોડીને તે ખોટું સત્ર બંધ કરી શકે છે; તેના બદલે ઓળખ ધરાવો.
એક જ નામ હેઠળ બીજું જોડાણ પહેલેથી શરૂ થઈ ગયા પછી ડિસ્કનેક્ટ રેકોર્ડ આવે છે, અને તે વપરાશકર્તા માટે નવીનતમ પંક્તિ અપડેટ કરતો હેન્ડલર ખોટું સત્ર બંધ કરે છે. ભૂલ સમયછાપની સરખામણીમાં નથી. ભૂલ એ ધારણામાં છે કે નામ ઉપરાંત એક આખી સેકન્ડ એક સત્રને ઓળખે છે. હૂક ઘટનાઓ જોડાણોનું વર્ણન કરે છે, અને જોડાણને એવી ચાવીની જરૂર છે જે ફક્ત તેની પોતાની હોય.
ડિસ્કનેક્ટ ચલોનો ખરેખર અર્થ શું છે તેનાથી શરૂ કરો. ત્યારે જ ઓળખકર્તાની પસંદગી અર્થપૂર્ણ બને છે.
ડિસ્કનેક્ટ હૂક ખરેખર શું વહન કરે છે
Community OpenVPN 2.6 માં, હૂક સંદર્ભ time_unix ને તે ક્ષણ તરીકે વ્યાખ્યાયિત કરે છે જ્યારે ક્લાયન્ટ જોડાયો; તે કનેક્ટ હૂક ચાલે તે પહેલાં સેટ થાય છે અને પછી ડિસ્કનેક્ટ હૂક સક્રિય થાય ત્યારે તેને ફરીથી વ્યાખ્યાયિત કરવામાં આવતું નથી. time_duration તે સત્રની લંબાઈ સેકન્ડમાં આપે છે, તેથી અંત આશરે જોડાણનો સમય ઉપરાંત અવધિ છે. બંને પૂર્ણ સેકન્ડ છે, અને બંમાંથી કોઈ તે ક્ષણ નથી જ્યારે તમારા ડેટાબેઝે ઘટના પ્રક્રિયા કરી. આ ત્રણ સમયને અલગ રાખવો એ જ સહસંબંધને ટકી રહેવા દે છે, ફક્ત પરીક્ષણ દરમિયાન સાચું દેખાવા દેતું નથી.
આ ગણિત લખવા લાયક છે, કારણ કે તે હૂક પોતે આપે છે તે એકમાત્ર અંતિમ સમય છે. પ્રક્રિયા વિલંબ અને યજમાનો વચ્ચેના ઘડિયાળના તફાવતો હજી પણ તેની બહાર રહે છે.
સ્પષ્ટ જોડી અનન્ય કેમ નથી
નામને જોડાણના સમય સાથે જોડવાથી શોધ સંકુચિત થાય છે અને હજી પણ સત્ર ઓળખાતું નથી. ક્લાયન્ટ એક જ સેકન્ડમાં ફરી જોડાઈ શકે છે, તેથી બે સત્રો બંને મૂલ્યો વહેંચી શકે છે. બે ડેમન ઇન્સ્ટન્સ, અથવા સમાન રૂપરેખા રાખતું સર્વર રિપ્લેસમેન્ટ, તે જોડી વિવિધ પ્રક્રિયાઓમાંથી બનાવી શકે છે. ટનલ સરનામાંઓ પણ એ જ કારણસર પુનઃચક્રિત થાય છે, જે તેમને સત્રની વિશેષતાઓ બનાવે છે, સત્રના ઓળખકર્તા નહીં.
નિષ્ફળતાની રીત શાંત છે. પ્રથમ સત્ર માટે મોડેથી આવતું ડિસ્કનેક્ટ નવીનતમ પંક્તિ સાથે મેળ ખાય છે અને બીજું સત્ર હજી વાપરી રહ્યું છે તેવી ફાળવણી નિવૃત્ત કરે છે, તેથી વપરાશકર્તાને અવ્યવસ્થિત ઍક્સેસ નુકસાન અનુભવાય છે જે તેણે કર્યું ન હતું. પછી પંક્તિઓની સંખ્યા સાચી દેખાય તે સમસ્યા શોધવાનું વધુ મુશ્કેલ બનાવે છે.
સ્થિર ઓળખ ક્યાંથી આવે છે
મેનેજમેન્ટ ઇન્ટરફેસ દરેક ક્લાયન્ટને ક્લાયન્ટ-ઇન્સ્ટન્સ ઓળખકર્તા આપે છે, અને તે ઓળખકર્તા તેને જારી કરનાર ડેમન ઇન્સ્ટન્સ સુધી મર્યાદિત છે. એક વ્યવહારુ બાહ્ય ચાવી સ્થિર સર્વર ઓળખકર્તા, ડેમન શરૂ થાય ત્યારે બદલાતો યુગ અને તે ક્લાયન્ટ ID ને જોડે છે. યુગ મહત્વપૂર્ણ છે કારણ કે ઓળખકર્તાઓ પ્રક્રિયા સાથે ફરી શરૂ થાય છે, અને નક્કર પ્રક્રિયા ID પછીથી અસંબંધિત વસ્તુ દ્વારા ફરી વપરાઈ શકે છે.
ચાઇલ્ડ કનેક્ટ સ્ક્રિપ્ટની અંદર સેટ કરેલા પર્યાવરણ ચલો પિતૃ ડેમનની પછીની ડિસ્કનેક્ટ સ્ક્રિપ્ટમાં પ્રવાસ કરતા નથી, કારણ કે તે સ્ક્રિપ્ટો પોતાના પર્યાવરણ સાથે અલગ પ્રક્રિયાઓ તરીકે ચાલે છે. તેથી જોડાણ સમયે UUID બનાવવું અડધો ઉપાય છે. ડિસ્કનેક્ટ બાજુએ તે જ UUID નામ આપી શકવું જોઈએ, જેનો અર્થ છે કે ઓળખ એવી જગ્યાએ રહેવી જોઈએ જ્યાં બંને ઘટનાઓ પહોંચી શકે.
નિવૃત્તિને શરતી અને ઇડેમ્પોટેન્ટ બનાવો
સત્રના માલિક દ્વારા નિવૃત્ત કરો, વપરાશકર્તા દ્વારા નહીં. જે હેન્ડલર નામ સાથે હાલમાં સંબંધિત કોઈપણ ફાળવણી કાઢી નાખે છે તે આખરે ખોટી જ કાઢી નાખશે, અને એકમાત્ર બચાવ એ ચકાસવાનો છે કે દૂર કરાતો રેકોર્ડ એ જ રેકોર્ડ છે જેનું આ ઘટના વર્ણન કરે છે.
મેનેજમેન્ટ ઇન્ટરફેસ એક સમયે એક જ જોડાયેલ મેનેજમેન્ટ ક્લાયન્ટ સ્વીકારે છે, તેથી સમાન સોકેટ માટે સ્પર્ધા કરતો બીજો નિરીક્ષક જોડવાને બદલે જે પહેલેથી તેનો માલિક છે તેની સાથે એકીકૃત થાઓ.
પુનરાવર્તિત ઘટનાઓને પરિણામ બે વાર બદલ્યા વિના સંભાળો, અને જોડી ન બનેલી ઘટનાઓને ફેંકી દેવાને બદલે સમાધાન માટે રાખો. ડિસ્કનેક્ટ કૉલબેકમાં દસ્તાવેજીકૃત જીવનચક્ર શરતો છે અને ક્રેશ કે સખત સ્ટોપ પછી તે કદી ન પણ આવે, તેથી ડિઝાઇનને એવું સત્ર દર્શાવવાની રીતની જરૂર છે જેની અંતિમ ઘટના ખૂટે છે.
અઘરા કિસ્સાઓ જાણી જોઈને ચકાસો: એક સેકન્ડમાં બે પુનઃજોડાણ, બે ડેમન ઇન્સ્ટન્સ, જેની પ્રક્રિયા નિષ્ફળ ગઈ તેવું જોડાણ અને સત્રની વચ્ચે ડેમનનું પુનઃપ્રારંભ. ચારેયને ટકાવી રાખતી ચાવી વિશ્વાસપાત્ર ચાવી છે.