স্পাইক অ্যারেস্ট নীতি সংক্রান্ত রানটাইম সমস্যার সমাধান করা

আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন।
তথ্য

InvalidMessageWeight

সমস্যার কোড

policies.ratelimit.InvalidMessageWeight

সমস্যার উত্তরের বডি

{
    "fault": {jdoe
        "faultstring": "Invalid message weight value [invalid_value]",
        "detail": {
            "errorcode": "policies.ratelimit.InvalidMessageWeight"
        }
    }
}

সমস্যার মেসেজের উদাহরণ

{
    "fault": {
        "faultstring": "Invalid message weight value 1.5",
        "detail": {
            "errorcode": "policies.ratelimit.InvalidMessageWeight"
        }
    }
}

কারণ

ফ্লো ভেরিয়েবলের মাধ্যমে <MessageWeight> এলিমেন্টের জন্য নির্দিষ্ট করা ভ্যালু ভুল হলে (পূর্ণসংখ্যা নয় এমন ভ্যালু), এই সমস্যাটি হয়।

যেমন, <MessageWeight> এলিমেন্টের জন্য নির্দিষ্ট ফ্লো ভেরিয়েবলের মান ১.৫ (পূর্ণসংখ্যা নয় এমন মান) হলে, সমস্যা হয়।

ডায়াগনসিস

  1. Spike Arrest নীতিতে <MessageWeight> এলিমেন্টের জন্য ব্যবহৃত ভুল মান শনাক্ত করুন। আপনি এই তথ্যটি ভুল উত্তরের faultstring এলিমেন্টে খুঁজে পেতে পারেন। যেমন, নিম্নলিখিত সমস্যার ক্ষেত্রে, <MessageWeight> এলিমেন্টের জন্য ব্যবহৃত ভুল ভ্যালু হল 1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. নির্দিষ্ট API প্রক্সিতে যেখানে সমস্যা হয়েছে সেখানে সব Spike Arrest নীতি পরীক্ষা করুন। এক বা একাধিক স্পাইক অ্যারেস্ট নীতি থাকতে পারে যেখানে <MessageWeight> এলিমেন্ট নির্দিষ্ট করা আছে।

    যেমন, নিম্নলিখিত নীতিতে <MessageWeight> -এর ভ্যালু message_weight: নামের ফ্লো ভেরিয়েবলের মাধ্যমে নির্দিষ্ট করা হয়েছে

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <SpikeArrest async="false" continueOnError="false" enabled="true" name="SpikeArrest_AuthProxy">
        <DisplayName>SpikeArrest_AuthProxy</DisplayName>
        <Properties/>
        <Identifier ref="request.header.some-header-name"/>
        <Rate>100ps</Rate>
        <MessageWeight ref="message_weight"/>
    </SpikeArrest>
    
  3. শনাক্ত করা স্পাইক অ্যারেস্ট নীতিতে <MessageWeight>ব্যবহৃত ভেরিয়েবলের মান নির্ধারণ করুন। ফ্লো ভেরিয়েবলের ভ্যালু HTTP হেডার, কোয়েরি প্যারামিটার, XML বা JSON রিকোয়েস্ট পেলোড থেকে এক্সট্র্যাক্ট করা হতে পারে অথবা অন্য কোনও নীতিতে সংজ্ঞায়িত করা হতে পারে।

    1. API প্রক্সির মধ্যে সেই কোডটি খুঁজে বের করুন যেখানে ভেরিয়েবলটি প্রথমবার ডিফাইন করা হয়েছে।
    2. যে নীতিতে ভেরিয়েবলটি প্রথমবার সংজ্ঞায়িত ও পপুলেট করা হয়েছে সেটি খুঁজে পাওয়ার পরে, ভেরিয়েবলের ভ্যালু কীভাবে সেট করা হয়েছে তা চেক করুন।
    3. ফ্লো ভেরিয়েবলের মান যদি উপরে উল্লিখিত ধাপ #১-এ শনাক্ত করা মানের সাথে মিলে যায়, তাহলে সেটিই হল সমস্যার কারণ।

    যেমন, ধরে নিন যে স্পাইক অ্যারেস্ট নীতির আগে একটি JavaScript নীতি ব্যবহার করা হয়েছে। এর মাধ্যমে, নিচে দেখানো মতো অনুরোধ পদ্ধতির উপর ভিত্তি করে message_weight ভেরিয়েবল সেট করা হয়েছে:

    var verb = context.getVariable("request.verb");
    context.setVariable("message_weight", "1.5");
    if (verb == 'POST') {
      context.setVariable("message_weight", "2");
    }
    

    লক্ষ্য করুন যে ভেরিয়েবল message_weight-এর ভ্যালু হল 1.5 যা হল ভুল (পূর্ণসংখ্যা নয়) ভ্যালু।

রেজোলিউশন

MessageWeight এলিমেন্টের ভ্যালু সঠিক ভ্যালু (পূর্ণসংখ্যা ভ্যালু) কিনা তা নিশ্চিত করুন।

উপরে দেখানো উদাহরণটি ঠিক করতে, আপনি জাভাস্ক্রিপ্টে message_weight ভেরিয়েবলের মান পরিবর্তন করে পূর্ণসংখ্যা করতে পারেন:

var verb = context.getVariable("request.verb");
context.setVariable("message_weight", "1");
if (verb == 'POST') {
  context.setVariable("message_weight", "2");
}

FailedToResolveSpikeArrestRate

সমস্যার কোড

policies.ratelimit.FailedToResolveSpikeArrestRate

সমস্যার উত্তরের বডি

{
    "fault": {
        "faultstring": "Failed to resolve Spike Arrest Rate reference [reference] in SpikeArrest policy [api_policy]",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate"
        }
    }
}

সমস্যার মেসেজের উদাহরণ

{
    "fault": {
        "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate"
        }
    }
}

কারণ

<Rate> এলিমেন্টের মধ্যে রেট সেটিং ধারণকারী ভেরিয়েবলের রেফারেন্স Spike Arrest পলিসির মধ্যে কোনও ভ্যালুতে রিজলভ করা না গেলে এই সমস্যা হয়। এই এলিমেন্টটি বাধ্যতামূলক এবং {int}pm বা {int}ps ফর্ম্যাটে স্পাইক অ্যারেস্ট রেট নির্দিষ্ট করতে ব্যবহার করা হয়। যেমন, {int}pm 500pm হতে পারে, যার অর্থ হল প্রতি মিনিটে ৫০০টি কল। একইভাবে, 10ps ভ্যালুর অর্থ হল প্রতি সেকেন্ডে ১০টি কল।

ডায়াগনসিস

  1. যে স্পাইক অ্যারেস্ট নীতিতে সমস্যা হয়েছে সেটি চিহ্নিত করুন এবং যে রেফারেন্স সঠিকভাবে সমাধান করা যাচ্ছে না তার নাম উল্লেখ করুন। আপনি এই দুটি আইটেমই সমস্যার উত্তরের faultstring এলিমেন্টে দেখতে পাবেন।

    যেমন, নিম্নলিখিত faultstring-এ, নীতির নাম হল SpikeArrest_AuthProxy এবং রেফারেন্স হল request.header.rate:

    "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
    
  2. ব্যর্থ হওয়া স্পাইক অ্যারেস্ট নীতি XML-এ, ব্যবহৃত রেফারেন্সের নাম ফল্ট স্ট্রিংয়ে শনাক্ত করা রেফারেন্স নামের সাথে মিলছে কিনা তা যাচাই করুন (উপরে #১ ধাপ)। ** **

    যেমন, নিম্নলিখিত নীতিটি এলিমেন্টকে রেফারেন্সের সাথে সেট করে request.header.rate নামে, যা ফল্টস্ট্রিংয়ে থাকা তথ্যের সাথে মিলে যায়:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <SpikeArrest async="false" continueOnError="false" enabled="true" name="SpikeArrest_AuthProxy">
        <DisplayName>SpikeArrest_AuthProxy</DisplayName>
        <Properties/>
        <Identifier ref="request.header.some-header-name"/>
        <Rate ref="request.header.rate"/>
    </SpikeArrest>
    
    
  3. ভেরিয়েবলটি যে ফ্লোতে স্পাইক অ্যারেস্ট নীতি প্রয়োগ করা হচ্ছে সেখানে সেটি নির্দিষ্ট করা আছে কিনা এবং উপলভ্য কিনা তা নির্ধারণ করুন।

  4. ভেরিয়েবলটি যদি এগুলির মধ্যে কোনও একটি হয়:

    • আউট-অফ-স্কোপ (যে নির্দিষ্ট ফ্লোতে নীতি প্রয়োগ করা হচ্ছে সেখানে উপলভ্য নয়) অথবা
    • সমাধান করা যাচ্ছে না (সংজ্ঞায়িত করা হয়নি)

    তাহলে এটিই হল সমস্যার কারণ।

    উপরে দেখানো উদাহরণে, <Rate> এলিমেন্টে স্পাইক অ্যারেস্ট রেটের ভ্যালু rate নামের অনুরোধের হেডার থেকে পাওয়ার কথা। তবে, Edge request.header.rate সংক্রান্ত সমস্যার সমাধান করতে পারছে না। API অনুরোধের অংশ হিসেবে rate হেডার না পাঠানো হলে এটি ঘটে।

    এখানে একটি API অনুরোধের নমুনা দেওয়া হল যা অনুরোধের অংশ হিসেবে রেট হেডার পাস করে না:

        curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json"
    

    যেহেতু rate হেডার অনুরোধের অংশ হিসেবে পাস করা হয়নি, তাই রেফারেন্স request.header.rate উপরে উল্লেখ করা স্পাইক অ্যারেস্ট নীতির এলিমেন্ট <Rate>-এ ব্যবহার করা হয়েছে যা সংজ্ঞায়িত করা হয়নি এবং তাই সমাধান করা যাবে না। তাই আপনি এই সমস্যার কোডটি পাবেন:

    policies.ratelimit.FailedToResolveSpikeArrestRate
    

রেজোলিউশন

<Rate> এলিমেন্টে উল্লেখ করা ভেরিয়েবলটি আছে/সংজ্ঞায়িত করা আছে এবং নির্দিষ্ট ফ্লোতে উপলভ্য আছে কিনা তা নিশ্চিত করুন, যেখানে স্পাইক অ্যারেস্ট নীতি প্রয়োগ করা হচ্ছে।

উপরে দেখানো উদাহরণটি ঠিক করতে, আপনি নিচে দেখানো রেট হেডার অন্তর্ভুক্ত করার জন্য অনুরোধটি পরিবর্তন করতে পারেন:

curl -v  http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"