Hideaki0225

相互フォローよろしくお願いします

PollerLikeとPollOperationStateとは

はじめに

こんにちは、ひであきです。

今回は、私自身が分からなかったPollerLikeとPollOperationStateの意味と違いについてのメモを記述をしています

PollerLikeとは

Pollerクラスの抽象表現です。

ユーザーが操作する必要のある最小限のAPIのみを公開することを目的としているインターフェースです。

(Pollerクラスとは完了状態に達するまで連続した要求をポーリングするプログラムの定義を表すクラスです。

そのため、実行している操作が完了するまでpoll()メソッドを繰り返し呼び出して要求ごとにポーリングを行っています。)

※Polling(ポーリング)とは、通信やソフトウェアにおいて、競合を回避したり、送受信の準備状況を判断したり、処理を同期したりするために、複数の機器やプログラムに対して順番に定期的に問い合わせを行い、一定の条件を満たした場合に送受信や処理を行う通信及び処理方式のことです。


PollOperationStateとは

長時間実行される操作ポーラーを定義するために必要なプロパティの最小セットの意見リストが含まれたインターフェースです。

機能としては、リモートの長時間実行操作のステータスを文書化します。

そのため、実装に必要なカスタムプロパティを格納するために使用されます。

少なくとも、操作の開始時、終了時、およびキャンセル時に更新する必要があります。

実装には、他の理由で更新できる他の数のプロパティを含めることができます。

※PollOperationStateインターフェースとPollOperationインターフェースのプロパティーのstateとは違います。


それぞれのインターフェースの取得できる情報

PollerLike

  • cancelOperation({ abortSignal?: AbortSignalLike })
  • getOperationState()
  • getResult()
  • isDone()
  • isStopped()
  • onProgress((state: TState) => void)
  • poll({ abortSignal?: AbortSignalLike })
  • pollUntilDone()
  • stopPolling()
  • toString()

以上の順番でメソッドの説明を記述します。

cancelOperation({ abortSignal?: AbortSignalLike })

実行している操作の基になる操作をキャンセルしようとします。

function cancelOperation(options?: { abortSignal?: AbortSignalLike })
: Promise<void>

引数
{ abortSignal?: AbortSignalLike }
実行している操作のシグナルを中止するオプションを記述する

戻り値
Promise<void>
戻り値なし

getOperationState()

操作の状態を返す。PollerLike で定義される TState は、Poller の実装で定義される TState のサブセットとすることができる。

function getOperationState(): TState

引数
なし

戻り値
TState
操作状態の値

getResult()

ポーラの状態に関係なく、操作の結果値を返す。実装によっては、未定義または最終的な TResult 値の不完全な形式を返すことがあります。

function getResult(): TResult | undefined

引数
なし

戻り値
TResult
操作の結果値

isDone()

ポーラーがポーリングを終了した場合、true を返す。

function isDone(): boolean

引数
なし

戻り値
boolean型で返ってくる

isStopped()

ポーラーが停止している場合、true を返す。

function isStopped(): boolean

引数
なし

戻り値
boolean型で返ってくる

onProgress((state: TState) => void)

ポーリングが完了するたびに指定されたコールバックを呼び出し、ポーラの操作の現在の状態を送信します。これは、指定されたコールバック関数の更新の受信を停止するために使用することができるメソッドを返します。

function onProgress(callback: (state: TState) => void): CancelOnProgress

引数
callback: (state: TState) => void
ポーラの操作の現在の状態

戻り値
CancelOnProgress
指定されたコールバック関数の更新の受信を停止するために使用することができるメソッド

poll({ abortSignal?: AbortSignalLike })

1つのポーリング要求が終了した時点で解決するプロミスを返します。これは、Pollerの操作のupdateメソッドを呼び出すことで行われます。

function poll(options?: { abortSignal?: AbortSignalLike }): Promise<void>

引数
options: { abortSignal: AbortSignalLike }
DOM要求(Fetchなど)と通信し、必要に応じてAbortControllerオブジェクトを介して中止できるようにするシグナルオブジェクトを引数として渡す

戻り値
Promise<void>
戻り値なし

pollUntilDone()

基礎となる操作が完了した時点で解決されるプロミスを返します。

function pollUntilDone(): Promise<TResult>

引数
なし

戻り値
Promise<TResult> 操作の結果値をプロミスで返す。

stopPolling()

ポーラーを停止します。この後、手動および自動のリクエストは送信できなくなります。

function stopPolling()

引数
なし

戻り値
なし

toString()

操作の toString メソッドを呼び出して、ポーラの操作のシリアル化されたバージョンを返します。

function toString(): string

引数
なし

戻り値
String型で返ってくる。


PollOpearationState

  • error
  • isCancelled
  • isCompleted
  • isStarted
  • result

以上の順番でプロパティーの説明を記述します。

error

操作でエラーが発生した場合に返ってきます。

error?: Error

プロパティーの値
Errorが返ってきます。

isCancelled

操作がキャンセルされたか否かを返します。

isCancelled?: boolean

プロパティーの値
boolean型で返ってきます。

isCompleted

操作が完了しているか否かを返します。

isCompleted?: boolean

プロパティーの値
boolean型で返ってきます。

isStarted

操作が開始されているか否かを返します。

isStarted?: boolean

プロパティーの値
boolean型で返ってきます。

result

期待されるタイプの結果で操作が終了した場合に返ってきます。

result?: TResult

プロパティーの値
実行していた操作の情報が返ってきます。


まとめ

PollerLikeとPollOperationStateのどちらも長時間実行を行わなければならない操作が呼び出された場合に使われるインターフェースです。

双方の違いとしましては、PollerLikeはメソッドを呼び出してポーラーを操作するインターフェースです。

PollOperationStateは実行された操作の情報を取得し、値を返してくれるインターフェースです。

参考にした資料👇
PollerLike interface
PollOperationState interface

前回説明した内容👇
beginCreateOrUpdateとbeginCreateOrUpdateAndWaitの違い

beginCreateOrUpdateとbeginCreateOrUpdateAndWaitの違い

はじめに

こんにちは、ひであきです。

この記事ではAzure SDKを使うにあたって私自身が分からなかったことをメモとして記述しています。

戻り値の違い

beginCreateOrUpdateとbeginCreateOrUpdateAndWaitの両方とも動く内容は同じようです。

この二つの違いは戻り値の値が違うということです。 (👇にこの二つのメソッドの戻り値を書きました)

beginCreateOrUpdateの戻り値は

Promise <PollerLike <PollOperationState
< ManagementGroupsCreateOrUpdateResponse >,
ManagementGroupsCreaeOrUupdateResponse >>

beginCreateOrUpdateAndWaitの戻り値は

Promise < ManagementGroupsCreateOrUpdateResponse >

以上のようにbginCreateOrUpdate方がbeginCreateOrUpdateAndWaitより ManagementGroupsCreateOrUpdateResponseの入っている階層が深いです。

(ManagementGroupsCreateOrUpdateResponseはPollerLikeというユーザーが 操作する必要のある最小限のAPIのみを公開しているインターフェースの中に PollOperationStateという長時間実行される操作ポーラーを定義するために必要な プロパティの最小セットの意見リストが含まれたインターフェースの中に入っている)



戻り値詳細

  • VirtualNetworkを作成したときの双方の戻り値の詳細
  • SubNetworkを作成したときの双方の戻り値の詳細
  • VirtualMachineを作成したときの双方の戻り値の詳細

以上の順番で書いています。


VirtualNetworkを作成したときのbeginCreateOrUpdateの時の戻り値詳細

LroEngine {
    stopped: true,
    pollProgressCallbacks: [],
    operation: GenericPollOperation {
        state: {
            initialRawResponse: [Object],
            isStarted: true,
            pollingURL: '****************************',
            config: [Object]
        },
        lro: LroImpl {
            sendOperationFn: [Function: sendOperation],
            args: [Object],
            spec: [Object],
            requestPath: '**********************************************',
            requestMethod: 'PUT'
        },
        lroResourceLocationConfig: '**********************',
        processResult: undefined,
        updateState: undefined,
        isDone: undefined,
        pollerConfig: { intervalInMs: 10000 },
        getLroStatusFromResponse: [Function (anonymous)],
        poll: [AsyncFunction (anonymous)]
    },
    resolve: [Function (anonymous)],
    reject: [Function (anonymous)],
    promise: Promise { <pending> },
    config: { intervalInMs: 10000 },
    pollOncePromise: undefined
}


VirtualNetworkを作成したときのbeginCreateOrUpdateAndWaitの時の戻り値詳細

{
    enableDdosProtection: false,
    enableVmProtection: false,
    status: 'Succeeded'
}


SubNetworkを作成したときのbeginCreateOrUpdateの時の戻り値詳細

LroEngine {
    stopped: true,
    pollProgressCallbacks: [],
    operation: GenericPollOperation {
        state: {
            initialRawResponse: [Object],
            isStarted: true,
            pollingURL: '******************************',
            config: [Object]
        },
        lro: LroImpl {
            sendOperationFn: [Function: sendOperation],
            args: [Object],
            spec: [Object],
            requestPath: '**********************************************',
            requestMethod: 'PUT'
        },
        lroResourceLocationConfig: '***********************',
        processResult: undefined,
        updateState: undefined,
        isDone: undefined,
        pollerConfig: { intervalInMs: 10000 },
        getLroStatusFromResponse: [Function (anonymous)],
        poll: [AsyncFunction (anonymous)]
    },
    resolve: [Function (anonymous)],
    reject: [Function (anonymous)],
    promise: Promise { <pending> },
    config: { intervalInMs: 10000 },
    pollOncePromise: undefined
}


SubNetworkを作成したときのbeginCreateOrUpdateAndWaitの時の戻り値詳細

{
    privateEndpointNetworkPolicies: 'Enabled',
    privateLinkServiceNetworkPolicies: 'Enabled',
    status: 'Succeeded'
}


VirtualMachineを作成したときのbeginCreateOrUpdateの時の戻り値詳細

LroEngine {
     stopped: true,
     pollProgressCallbacks: [],
     operation: GenericPollOperation {
        state: {
            initialRawResponse: [Object],
            isStarted: true,
            pollingURL: '**********************************************',
            config: [Object],
            result: [Object],
            isCompleted: true
        },
        lro: LroImpl {
            sendOperationFn: [Function: sendOperation],
            args: [Object],
            spec: [Object],
            requestPath: '**********************************************',
            requestMethod: 'PUT'
        },
        lroResourceLocationConfig: undefined,
        processResult: undefined,
        updateState: undefined,
        isDone: undefined,
        pollerConfig: { intervalInMs: 2000 },
        getLroStatusFromResponse: [Function: processBodyPollingOperationResult],
        poll: [AsyncFunction (anonymous)]
    },
    resolve: [Function (anonymous)],
    reject: [Function (anonymous)],
    promise: Promise {
        {
            id: '*************************************'
            osProfile: [Object],
            networkProfile: [Object],
            provisioningState: 'Succeeded',
            vmId: '*************************',
            timeCreated: ***********************
        }
    },
    config: { intervalInMs: 2000 },
    pollOncePromise: undefined
}


VirtualMachineを作成したときのbeginCreateOrUpdateAndWaitの時の戻り値詳細

{
    id: '********************************************************',
    name: '********************',
    type: 'Microsoft.Compute/***************',
    location: '***************',
    hardwareProfile: { vmSize: '********************' },
    storageProfile: {
        imageReference: {
            publisher: '****************',
            offer: '**********************',
            sku: '**************************',
            version: '*************',
            exactVersion: '*********************'
        },
        osDisk: {
            osType: '************',
            name: '***************',
            caching: '*************',
            createOption: '***********',
            diskSizeGB: **********,
            managedDisk: [Object],
            deleteOption: 'Detach'
        },
        dataDisks: [ [Object], [Object] ]
    },
    osProfile: {
        computerName: '****************',
        adminUsername: '*************',
        windowsConfiguration: {
            provisionVMAgent: true,
            enableAutomaticUpdates: true,
            patchSettings: [Object],
            enableVMAgentPlatformUpdates: false
        },
        secrets: [],
        allowExtensionOperations: true,
        requireGuestProvisionSignal: true
    },
    networkProfile: { networkInterfaces: [ [Object] ] },
    provisioningState: 'Succeeded',
    vmId: '********************************',
    timeCreated: ***********************
}


まとめ

beginCreateOrUpdateとbeginCreateOrUpdateAndWaitでは戻り値の階層が違います。

そのため、戻り値の内容が大幅に違います。

実際に自分が作ったVirtualMachineの名前やIDを戻り値に含みたい場合はbeginCreateOrUpdateAndWaitを使う必要があります。

beginCreateOrUpdateの戻り値の階層の中にあるPollerLikeとPollOperationStateは以下の記事にまとめています。👇
PollerLikeとPollOperationStateとは

就職活動が終了した後のIT専門学生の日常

はじめに


こんにちは、ひであきです。
私は現在専門学校の4年生で就活が終わったので、最後の学生ライフを満喫している最中です。

この最後の一年を日記みたいに何かに残したいと考え、ブログに一週間でおきた出来事を投稿しました。

 

一週間の日常


私が在学している専門学校は今年から全てオフラインで授業になりました。なので平日は毎日学校まで通学して授業を受けてます。(オフライン授業であった頃が恋しいです)
そのことをふまえて月曜日から順に書いていきます。

・月曜日
この日は2~4限まで授業がありました。

2,3限はLinuxでroot権限を使ってSUIDとSGIDとスティッキービットの設定の方法そしてrootに入るためのパスワードを忘れてしまったときのリカバリー方法を習いました。

4限目はRaspberry Piを使ってPythonでPWM制御をしながらLEDを光らせるということを授業内課題でしました。

その後は、家に帰り最近ハマっている「パリピ孔明」というアニメを見て終わりました。

 

・火曜日
この日は先生側との都合で3~6限まである授業が3限目の応用情報技術者試験を取得するための授業だけになり、授業もオンラインでうけることになりました。(最高過ぎる!!!!)

その後はpaizaでCランクのプログラミングの問題を解いて、趣味でしているIT・ゲーム・CGの企業別就職の面接で聞かれる質問の内容をVBAを使ってグラフで出力するということをしました。

 

・水曜日
この日は4,5限にAndroidアプリについての授業がありました。

ListViewをカスタマイズしてToDoリストを作成しようという課題が出てたので授業中に完成させました。

課題も終わったのでスッキリした気持ちで寝ることが出来ました。

 

・木曜日
この日は1,2限にグループ制作を主に行う授業がありました。

1チーム20人のグループで開発する作品が街や建物をサブネットやサーバーに見立てて街を開発していこうというゲームを作ることになりました。(作り切れるかどうかがとても不安です。)

 

・金曜日
この日は1,2限にITコンサルについての授業がありました。

DX化とIT化の違いをプレゼン資料で纏めて来週にプレゼンをすると言われました。

来週の金曜日は公欠を取っているのでラッキーでした!!

 

以上が就活が終わったIT専門学生の最初の平日の一週間でした。
本日はここまで、それでは

 

ListViewをカスタマイズする方法(是非よければ読んでみて下さい)
https://qiita.com/Tanigawa-Hideaki/items/dfc7c1e8211173ef2375