कोटा रनटाइम की गड़बड़ी को रीसेट करने से जुड़ी समस्या

Apigee Edge का दस्तावेज़ देखा जा रहा है.
Apigee X के दस्तावेज़ पर जाएं.
info

पर क्लिक करें.

InvalidRLPolicy

गड़बड़ी का कोड

policies.resetquota.InvalidRLPolicy

गड़बड़ी के जवाब का मुख्य हिस्सा

{
    "fault": {
        "faultstring": "Invalid rate limit policy quota_policy_name",
        "detail": {
            "errorcode": "policies.resetquota.InvalidRLPolicy"
        }
    }
}

गड़बड़ी के मैसेज का उदाहरण

{
    "fault": {
        "faultstring": "Invalid rate limit policy MyQuotaPolicy",
        "detail": {
            "errorcode": "policies.resetquota.InvalidRLPolicy"
        }
    }
}

वजह

यह गड़बड़ी तब होती है, जब रीसेट कोटा नीति के <Quota> एलिमेंट में बताई गई कोटा नीति को एपीआई प्रॉक्सी में तय नहीं किया जाता है. <Quota> एलिमेंट ज़रूरी है. यह उस टारगेट कोटा नीति की पहचान करता है जिसके काउंटर को रीसेट कोटा नीति के ज़रिए अपडेट किया जाना चाहिए. इस टारगेट कोटा नीति को, उसी एपीआई प्रॉक्सी में बनाया और तय किया जाना चाहिए. साथ ही, यह फ़्लो के दौरान उपलब्ध होनी चाहिए.

उदाहरण के लिए, मान लें कि <Quota> एलिमेंट को नीचे दिए गए तरीके से तय किया गया है. हालांकि, अगर एपीआई प्रॉक्सी में MyQuotaPolicy को तय नहीं किया गया है, तो आपको ऊपर दी गई गड़बड़ी का मैसेज दिखेगा.

<Quota name="MyQuotaPolicy">

संक्रमण की जांच

  1. रीसेट कोटा नीति में बताए गए, अमान्य कोटा नीति के नाम का पता लगाएं. फ़ॉल्टस्ट्रिंग से, कोटा नीति का नाम पता लगाया जा सकता है. उदाहरण के लिए, यहां दिए गए फ़ॉल्टस्ट्रिंग में, Quota नीति का नाम MyQuotaPolicy: है

    "faultstring": "Invalid rate limit policy MyQuotaPolicy"
    
  2. उस एपीआई प्रॉक्सी में रीसेट कोटा से जुड़ी हर नीति की जांच करें जहां गड़बड़ी हुई है. उस खास 'रीसेट कोटा' नीति की पहचान करें जिसमें ज़रूरी एलिमेंट <Quota> में बताई गई 'कोटा' नीति का नाम, ऊपर दिए गए पहले चरण में पहचाने गए नाम से मेल खाता हो.

    उदाहरण के लिए, यहां दी गई रीसेट कोटा नीति में, MyQuotaPolicy नाम की कोटा नीति के बारे में बताया गया है. यह नीति, फ़ॉल्टस्ट्रिंग में मौजूद नीति से मेल खाती है:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ResetQuota async="false" continueOnError="false" enabled="true" name="Reset_Quota_Demo">
        <DisplayName>Reset_Quota_Demo</DisplayName>
        <Properties/>
        <Quota name="MyQuotaPolicy">
           <Identifier name="identifierName" ref="request.header.identifier">
                <Allow>100</Allow>
            </Identifier>
        </Quota>
    </ResetQuota>
    
    
  3. इससे यह तय करने में मदद मिलती है कि क्या यह कोटा नीति, एक ही एपीआई प्रॉक्सी में बनाई और तय की गई है. अगर एक ही एपीआई प्रॉक्सी में कोटा नीति मौजूद नहीं है, तो यह गड़बड़ी की वजह है.

    ऊपर दिए गए उदाहरण में, रीसेट कोटा नीति Reset_Quota_Demo लागू होने से पहले, कोटा नीति MyQuotaPolicy को फ़्लो में मौजूद होना चाहिए.

    फ़्लो में कोटा नीति MyQuotaPolicy मौजूद नहीं है. इसलिए, आपको यह गड़बड़ी कोड मिलेगा:

"errorcode": "policies.resetquota.InvalidRLPolicy"

रिज़ॉल्यूशन

पक्का करें कि <Quota> एलिमेंट में बताई गई कोटा नीति, एपीआई प्रॉक्सी में तय की गई हो. Reset Quota नीति लागू होने पर, Target Quota नीति उपलब्ध होनी चाहिए.

FailedToResolveAllowCountRef

गड़बड़ी का कोड

policies.resetquota.FailedToResolveAllowCountRef

गड़बड़ी के जवाब का मुख्य हिस्सा

Failed to resolve allow count reference reference_name for identifier identifier_name
in ResetQuotaStepDefinition:policy_name;API Proxy:proxy_name;Revision:
revision_number;Environment:env_name;Organization:org_name

गड़बड़ी के मैसेज का उदाहरण

Failed to resolve allow count reference request.header.allowcount for identifier
identifierName in ResetQuotaStepDefinition:ResetQuota;API Proxy:Reset_Quota;
Revision:10;Environment:test;Organization:demo

क्लाइंट को यह गड़बड़ी दिखेगी: policies.ratelimit.QuotaViolation.

वजह

यह गड़बड़ी तब होती है, जब नीति के <Allow> एलिमेंट में, अनुमति दी गई संख्या की जानकारी देने वाले वैरिएबल के रेफ़रंस को किसी वैल्यू में नहीं बदला जा सकता. यह एलिमेंट ज़रूरी है. इससे कोटे के काउंटर को कम करने के लिए रकम तय की जाती है.

संक्रमण की जांच

  1. उस रीसेट कोटा नीति का पता लगाएं जिसमें गड़बड़ी हुई है. साथ ही, उस रेफ़रंस वैरिएबल का नाम पता लगाएं जिसे हल नहीं किया जा सकता. आपको ये दोनों आइटम, गड़बड़ी के जवाब में मिल सकते हैं.

    उदाहरण के लिए, यहां दिए गए faultstring में, नीति का नाम ResetQuota है और रेफ़रंस request.header.allowcount है:

    Failed to resolve allow count reference request.header.allowcount for identifier
    identifierName in ResetQuotaStepDefinition:ResetQuota;API Proxy:Reset_Quota;
    Revision:10;Environment:test;Organization:demo
    
  2. रीसेट कोटा नीति के उल्लंघन वाले एक्सएमएल में, पुष्टि करें कि इस्तेमाल किए गए रेफ़रंस वैरिएबल का नाम, गड़बड़ी के जवाब में पहचाने गए रेफ़रंस नाम (ऊपर पहला चरण) से मेल खाता हो.

    उदाहरण के लिए, यहां दी गई नीति में, request.header.allowcount नाम वाले रेफ़रंस के साथ एलिमेंट सेट किया गया है. यह गड़बड़ी में मौजूद एलिमेंट से मेल खाता है:

    <ResetQuota async="false" continueOnError="false" enabled="true" name="ResetQuota">
        <DisplayName>ResetQuota</DisplayName>
        <Properties/>
        <Quota name="MyQuotaPolicy">
            <Identifier name="identifierName">
                <Allow ref="request.header.allowcount"/>
            </Identifier>
        </Quota>
    </ResetQuota>
    
  3. यह तय करें कि जिस फ़्लो में रीसेट कोटा नीति लागू होती है उसमें रेफ़रंस वैरिएबल को तय किया गया है और वह उपलब्ध है.

  4. अगर वैरिएबल की वैल्यू इनमें से कोई एक है:

    1. स्कोप से बाहर है (उस फ़्लो में उपलब्ध नहीं है जहां नीति लागू की जा रही है) या
    2. हल नहीं किया जा सकता (तय नहीं किया गया है)

    तो यह गड़बड़ी की वजह है.

    ऊपर दिए गए उदाहरण में, <Allow> एलिमेंट में मौजूद, अनुमति दी गई संख्या की वैल्यू को allowcount नाम के अनुरोध हेडर से वापस पाना है. हालांकि, Edge request.header.allowcount को हल नहीं कर पा रहा है. ऐसा तब होता है, जब एपीआई अनुरोध के हिस्से के तौर पर, हेडर allowcount को पास नहीं किया जाता.

    यहां एपीआई अनुरोध का एक सैंपल दिया गया है. इसमें अनुरोध के हिस्से के तौर पर, हेडर allowcount को पास नहीं किया गया है:

    curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json"
    

    हेडर allowcount को अनुरोध के हिस्से के तौर पर पास नहीं किया गया है. इसलिए, ऊपर दी गई रीसेट कोटा नीति में एलिमेंट <Allow> में इस्तेमाल किया गया वैरिएबल request.header.allowcount तय नहीं किया गया है. इसलिए, इसे हल नहीं किया जा सकता. इसलिए, आपको यह गड़बड़ी वाला जवाब मिलेगा:

    Failed to resolve allow count reference request.header.allowcount for identifier
    identifierName in ResetQuotaStepDefinition:ResetQuota;API Proxy:Reset_Quota;
    Revision:10;Environment:test;Organization:demo
    

रिज़ॉल्यूशन

पक्का करें कि <Allow> एलिमेंट में जिस वैरिएबल का रेफ़रंस दिया गया है वह मौजूद हो/तय किया गया हो और उस फ़्लो में उपलब्ध हो जहां रीसेट कोटा की नीति लागू होती है.

ऊपर दिए गए उदाहरण को ठीक करने के लिए, अनुरोध में बदलाव किया जा सकता है. इसके लिए, आपको allowcount हेडर को शामिल करना होगा. ऐसा नीचे दिए गए तरीके से करें:

curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json" -H "allowcount:30"

FailedToResolveRLPolicy

गड़बड़ी का कोड

policies.resetquota.FailedToResolveRLPolicy

गड़बड़ी के जवाब का मुख्य हिस्सा

{
    "fault": {
        "faultstring": "Failed to resolve rate limit policy",
        "detail": {
            "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
        }
    }
}

गड़बड़ी के मैसेज का उदाहरण

{
    "fault": {
        "faultstring": "Failed to resolve rate limit policy",
        "detail": {
            "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
        }
    }
}

वजह

यह गड़बड़ी तब होती है, जब <Quota> एलिमेंट में मौजूद ref एट्रिब्यूट से रेफ़र किया गया वैरिएबल लोड नहीं होता.

उदाहरण के लिए, अगर ref एट्रिब्यूट को <Quota> एलिमेंट में request.header.quotapolicy के तौर पर सेट किया गया है, लेकिन यह एपीआई प्रॉक्सी फ़्लो में उपलब्ध नहीं है, तो आपको ऊपर दी गई गड़बड़ी दिखेगी.

<Quota ref="request.header.quotapolicy">

संक्रमण की जांच

  1. एपीआई प्रॉक्सी में, रीसेट कोटा से जुड़ी हर नीति की जांच करें. इसमें यह देखें कि किस नीति में गड़बड़ी हुई है. साथ ही, रीसेट कोटा से जुड़ी उस नीति का पता लगाएं जिसमें <Quota> एलिमेंट में दिए गए रेफ़रंस वैरिएबल के नाम को सही तरीके से हल नहीं किया जा सकता.

  2. यह तय करें कि जिस फ़्लो में Reset Quota नीति लागू होती है उसमें वैरिएबल को तय किया गया है और वह उपलब्ध है.

  3. अगर वैरिएबल की वैल्यू इनमें से कोई एक है:

    1. स्कोप से बाहर है (उस फ़्लो में उपलब्ध नहीं है जहां नीति लागू होती है) या
    2. हल नहीं किया जा सकता (तय नहीं किया गया है)

    तो यह गड़बड़ी की वजह है.

    यहां दिए गए उदाहरण में, टारगेट कोटा नीति का नाम, quotapolicy नाम के अनुरोध के हेडर से वापस पाना होता है. हालांकि, Edge request.header.quotapolicy को हल नहीं कर सकता. ऐसा तब होता है, जब एपीआई अनुरोध के हिस्से के तौर पर quotapolicy हेडर नहीं भेजा जाता.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ResetQuota async="false" continueOnError="false" enabled="true" name="Reset_Quota_Demo">
        <DisplayName>Reset_Quota_Demo</DisplayName>
        <Properties/>
        <Quota ref="request.header.quotapolicy">
            <Identifier name="identifierName" ref="request.header.identifier">
                <Allow>100</Allow>
            </Identifier>
        </Quota>
    </ResetQuota>
    

    यहां एपीआई अनुरोध का एक सैंपल दिया गया है. इसमें अनुरोध के हिस्से के तौर पर, quotapolicy हेडर नहीं भेजा गया है:

    curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json"
    

    हेडर quotapolicy को अनुरोध के हिस्से के तौर पर पास नहीं किया गया है. इसलिए, ऊपर दी गई रीसेट कोटा नीति में मौजूद एलिमेंट <Quota> में इस्तेमाल किया गया रेफ़रंस request.header.quotapolicy तय नहीं किया गया है और इसे हल नहीं किया जा सकता. इस वजह से, आपको गड़बड़ी का यह जवाब मिलता है:

    "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
    

रिज़ॉल्यूशन

पक्का करें कि ref एट्रिब्यूट, <Quota> एलिमेंट में रेफ़र किया गया हो. साथ ही, यह रनटाइम पर हल हो जाता हो और उस फ़्लो में उपलब्ध हो जहां रीसेट कोटा नीति लागू होती है.

ऊपर दिए गए उदाहरण को ठीक करने के लिए, अनुरोध में बदलाव किया जा सकता है. इसके लिए, quotapolicy हेडर को शामिल करें. ऐसा नीचे दिए गए तरीके से करें:

curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json" -H "quotapolicy:MyQuotaPolicy"