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

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

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. कोटा रीसेट करने की नीति में मौजूद, कोटा नीति के अमान्य नाम की पहचान करें. कोटा नीति का नाम, गड़बड़ी वाली स्ट्रिंग में देखा जा सकता है. उदाहरण के लिए, इस गलत गड़बड़ी में कोटा नीति का नाम 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> एलिमेंट में बताई गई कोटा नीति, एपीआई प्रॉक्सी में बताई गई हो. कोटा रीसेट करने की नीति लागू होने पर, टारगेट कोटा नीति उपलब्ध होनी चाहिए.

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. कोटा रीसेट करने की उस नीति की पहचान करें जहां गड़बड़ी हुई है. साथ ही, उस रेफ़रंस वैरिएबल के नाम की पहचान करें जिसे हल नहीं किया जा सकता. आपको ये दोनों आइटम, गड़बड़ी के जवाब में मिल सकते हैं.

    उदाहरण के लिए, नीचे दी गई गड़बड़ी में नीति का नाम 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 एट्रिब्यूट से रेफ़र किए गए वैरिएबल को हल नहीं किया जा सकता.

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

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

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

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

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

  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"
    

रिज़ॉल्यूशन

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

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

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