Skip to content

Commit 45177ce

Browse files
authored
fix sample live execution (Azure#21654)
* fix sample live execution
1 parent b29a0b9 commit 45177ce

File tree

3 files changed

+258
-30
lines changed

3 files changed

+258
-30
lines changed

sdk/confidentialledger/Azure.Security.ConfidentialLedger/README.md

Lines changed: 127 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,18 @@ string status = JsonDocument.Parse(statusResponse.Content)
122122
.GetProperty("state")
123123
.GetString();
124124

125+
Console.WriteLine($"Transaction status: {status}");
126+
127+
// Wait for the entry to be committed
128+
while (status == "Pending")
129+
{
130+
statusResponse = ledgerClient.GetTransactionStatus(transactionId);
131+
status = JsonDocument.Parse(statusResponse.Content)
132+
.RootElement
133+
.GetProperty("state")
134+
.GetString();
135+
}
136+
125137
Console.WriteLine($"Transaction status: {status}");
126138
```
127139

@@ -157,18 +169,45 @@ Response postResponse = ledgerClient.PostLedgerEntry(
157169
RequestContent.Create(
158170
new { contents = "Hello world!" }));
159171
postResponse.Headers.TryGetValue(ConfidentialLedgerConstants.Headers.TransactionId, out string transactionId);
160-
string subLedgerId = JsonDocument.Parse(statusResponse.Content)
172+
string subLedgerId = JsonDocument.Parse(postResponse.Content)
161173
.RootElement
162174
.GetProperty("subLedgerId")
163175
.GetString();
164176

177+
// Wait for the entry to be available.
178+
status = "Pending";
179+
while (status == "Pending")
180+
{
181+
statusResponse = ledgerClient.GetTransactionStatus(transactionId);
182+
status = JsonDocument.Parse(statusResponse.Content)
183+
.RootElement
184+
.GetProperty("state")
185+
.GetString();
186+
}
187+
188+
Console.WriteLine($"Transaction status: {status}");
189+
165190
// Provide both the transactionId and subLedgerId.
166191
Response getBySubledgerResponse = ledgerClient.GetLedgerEntry(transactionId, subLedgerId);
167192

168-
string contents = JsonDocument.Parse(getBySubledgerResponse.Content)
169-
.RootElement
170-
.GetProperty("contents")
171-
.GetString();
193+
// Try until the entry is available.
194+
bool loaded = false;
195+
JsonElement element = default;
196+
string contents = null;
197+
while (!loaded)
198+
{
199+
loaded = JsonDocument.Parse(getBySubledgerResponse.Content)
200+
.RootElement
201+
.TryGetProperty("entry", out element);
202+
if (loaded)
203+
{
204+
contents = element.GetProperty("contents").GetString();
205+
}
206+
else
207+
{
208+
getBySubledgerResponse = ledgerClient.GetLedgerEntry(transactionId, subLedgerId);
209+
}
210+
}
172211

173212
Console.WriteLine(contents); // "Hello world!"
174213
@@ -177,6 +216,7 @@ getBySubledgerResponse = ledgerClient.GetLedgerEntry(transactionId);
177216

178217
string subLedgerId2 = JsonDocument.Parse(getBySubledgerResponse.Content)
179218
.RootElement
219+
.GetProperty("entry")
180220
.GetProperty("subLedgerId")
181221
.GetString();
182222

@@ -199,31 +239,104 @@ ledgerClient.PostLedgerEntry(
199239

200240
firstPostResponse.Headers.TryGetValue(ConfidentialLedgerConstants.Headers.TransactionId, out string transactionId);
201241

242+
// Wait for the entry to be committed
243+
status = "Pending";
244+
while (status == "Pending")
245+
{
246+
statusResponse = ledgerClient.GetTransactionStatus(transactionId);
247+
status = JsonDocument.Parse(statusResponse.Content)
248+
.RootElement
249+
.GetProperty("state")
250+
.GetString();
251+
}
252+
202253
// The ledger entry written at the transactionId in firstResponse is retrieved from the default sub-ledger.
203254
Response getResponse = ledgerClient.GetLedgerEntry(transactionId);
255+
256+
// Try until the entry is available.
257+
loaded = false;
258+
element = default;
259+
contents = null;
260+
while (!loaded)
261+
{
262+
loaded = JsonDocument.Parse(getResponse.Content)
263+
.RootElement
264+
.TryGetProperty("entry", out element);
265+
if (loaded)
266+
{
267+
contents = element.GetProperty("contents").GetString();
268+
}
269+
else
270+
{
271+
getResponse = ledgerClient.GetLedgerEntry(transactionId, subLedgerId);
272+
}
273+
}
274+
204275
string firstEntryContents = JsonDocument.Parse(getResponse.Content)
205276
.RootElement
277+
.GetProperty("entry")
206278
.GetProperty("contents")
207279
.GetString();
208280

209281
Console.WriteLine(firstEntryContents); // "Hello world 0"
210282
211283
// This will return the latest entry available in the default sub-ledger.
212284
getResponse = ledgerClient.GetCurrentLedgerEntry();
213-
string latestDefaultSubLedger = JsonDocument.Parse(getResponse.Content)
214-
.RootElement
215-
.GetProperty("contents")
216-
.GetString();
285+
286+
// Try until the entry is available.
287+
loaded = false;
288+
element = default;
289+
string latestDefaultSubLedger = null;
290+
while (!loaded)
291+
{
292+
loaded = JsonDocument.Parse(getResponse.Content)
293+
.RootElement
294+
.TryGetProperty("contents", out element);
295+
if (loaded)
296+
{
297+
latestDefaultSubLedger = element.GetString();
298+
}
299+
else
300+
{
301+
getResponse = ledgerClient.GetCurrentLedgerEntry();
302+
}
303+
}
217304

218305
Console.WriteLine($"The latest ledger entry from the default sub-ledger is {latestDefaultSubLedger}"); //"Hello world 1"
219306
220307
// The ledger entry written at subLedgerTransactionId is retrieved from the sub-ledger 'sub-ledger'.
221308
subLedgerPostResponse.Headers.TryGetValue(ConfidentialLedgerConstants.TransactionIdHeaderName, out string subLedgerTransactionId);
309+
310+
// Wait for the entry to be committed
311+
status = "Pending";
312+
while (status == "Pending")
313+
{
314+
statusResponse = ledgerClient.GetTransactionStatus(subLedgerTransactionId);
315+
status = JsonDocument.Parse(statusResponse.Content)
316+
.RootElement
317+
.GetProperty("state")
318+
.GetString();
319+
}
320+
222321
getResponse = ledgerClient.GetLedgerEntry(subLedgerTransactionId, "my sub-ledger");
223-
string subLedgerEntry = JsonDocument.Parse(getResponse.Content)
224-
.RootElement
225-
.GetProperty("contents")
226-
.GetString();
322+
// Try until the entry is available.
323+
loaded = false;
324+
element = default;
325+
string subLedgerEntry = null;
326+
while (!loaded)
327+
{
328+
loaded = JsonDocument.Parse(getResponse.Content)
329+
.RootElement
330+
.TryGetProperty("entry", out element);
331+
if (loaded)
332+
{
333+
subLedgerEntry = element.GetProperty("contents").GetString();
334+
}
335+
else
336+
{
337+
getResponse = ledgerClient.GetLedgerEntry(subLedgerTransactionId, "my sub-ledger");
338+
}
339+
}
227340

228341
Console.WriteLine(subLedgerEntry); // "Hello world sub-ledger 0"
229342
@@ -242,7 +355,7 @@ Console.WriteLine($"The latest ledger entry from the sub-ledger is {latestSubLed
242355
Ledger entries in a sub-ledger may be retrieved over a range of transaction ids.
243356

244357
```C# Snippet:RangedQuery
245-
ledgerClient.GetLedgerEntries(fromTransactionId: "2.1", toTransactionId: "4.5");
358+
ledgerClient.GetLedgerEntries(fromTransactionId: "2.1", toTransactionId: subLedgerTransactionId);
246359
```
247360

248361
### User management

sdk/confidentialledger/Azure.Security.ConfidentialLedger/tests/ConfidentialLedgerClientLiveTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ public void Setup()
5151

5252
public async Task GetUser(string objId)
5353
{
54-
// string objId = TestEnvironment.ConfidentialLedgerAdminOid;
5554
var result = await Client.GetUserAsync(objId);
5655
var stringResult = new StreamReader(result.ContentStream).ReadToEnd();
5756

0 commit comments

Comments
 (0)