Klien Cloud Storage di Library Klien Cloud untuk Rust menulis objek dengan
menarik potongan payload dari jenis yang mengimplementasikan trait StreamingSource.
Jika aplikasi Anda mendeteksi kondisi error saat membuat atau melakukan streaming data, menampilkan error dari implementasi StreamingSource akan menghentikan library klien untuk menyelesaikan pembuatan objek.
Dokumen ini menunjukkan cara menentukan jenis error kustom dan menerapkan
StreamingSource untuk menampilkan error tersebut di tengah streaming. Anda juga memverifikasi bahwa
upload yang gagal menampilkan error tanpa membuat objek. Jika Anda baru menggunakan library klien, lihat Menggunakan Cloud Storage dengan Rust terlebih dahulu.
Sebelum memulai
Sebelum menjalankan kode dalam dokumen ini, selesaikan prasyarat berikut:
- Buat atau pilih projectGoogle Cloud dengan penagihan diaktifkan.
- Buat bucket Cloud Storage di project Anda.
- Konfigurasikan Kredensial Default Aplikasi dan berikan peran Identity and Access Management (IAM) kepada akun utama Anda dengan izin untuk membuat objek di bucket, seperti Storage Object User (
roles/storage.objectUser).
Dependensi
Tambahkan library klien Cloud Storage dan crate pendukung ke file Cargo.toml Anda:
cargo add google-cloud-storage anyhow bytes
Membuat jenis error kustom
Untuk membatalkan penulisan objek sebelum finalisasi, implementasi StreamingSource Anda harus menampilkan error yang mengimplementasikan std::error::Error + Send + Sync + 'static. Anda dapat menggunakan jenis error yang ada yang memenuhi batasan ini atau menentukan enum kustom untuk aplikasi Anda. Selesaikan langkah-langkah berikut untuk menentukan enum error kustom:
Tentukan enum error kustom (
MyError):Terapkan trait
Errorstandar agar library klien dapat mempertahankan error Anda sebagai penyebab utamanya:Terapkan trait
Displayyang diperlukan olehstd::error::Error:
Mengimplementasikan sumber streaming kustom
Selanjutnya, buat jenis yang menghasilkan potongan sintetis dan menampilkan error setelah 41 potongan sehingga upload berhenti sebelum selesai. Selesaikan langkah-langkah berikut:
Tentukan struct untuk melacak penghitung potongan:
Terapkan
StreamingSourceuntukMySource, yang mengaitkantype Error = MyErrordan menampilkanSome(Err(MyError::ExpectedProblem))pada iterasi 42:
Saat next menampilkan Some(Err(...)), library klien akan berhenti membaca dari sumber dan membatalkan permintaan tulis tanpa menyelesaikan objek.
Mencoba upload dan memeriksa error
Setelah menerapkan StreamingSource, coba tulis objek yang di-buffer dan verifikasi
bahwa klien menampilkan error serialisasi yang menggabungkan MyError. Karena
MySource adalah sumber single-pass yang tidak mengimplementasikan Seek, mulai
penulisan dengan send_buffered, bukan send_unbuffered.
Di dalam fungsi async yang menerima bucket_name dalam format
projects/_/buckets/BUCKET_ID, selesaikan langkah-langkah
berikut:
Lakukan inisialisasi klien
Storage:Mulai penulisan objek yang di-buffer menggunakan
MySource::default()sebagai sumber payload:Pastikan upload gagal dengan error serialisasi yang error sumbernya adalah
MyError:Tampilkan
Ok(())untuk menyelesaikan fungsi:
Saat Anda menjalankan attempt_upload, pesan Upload result Err(...) yang berisi MyError::ExpectedProblem akan dicetak. Pernyataan tersebut memverifikasi bahwa klien
menghentikan upload dan menampilkan error serialisasi yang menggabungkan MyError. Karena
operasi tulis dibatalkan sebelum finalisasi, Cloud Storage tidak
membuat objek expect-error di bucket.
Pembersihan
Meskipun penulisan yang dibatalkan tidak membuat objek, hapus objek pengujian apa pun yang Anda buat untuk dokumen ini. Menghapus resource pengujian setelah selesai akan menghindari tagihan berkelanjutan.
Kode lengkap
Contoh berikut menggabungkan semua langkah sebelumnya menjadi modul lengkap:
Langkah berikutnya
- Pelajari cara mendorong data pada penulisan objek Cloud Storage.