All Products
Search
Document Center

Object Storage Service:Galat 'Bucket is not empty' saat menghapus bucket OSS

Last Updated:Aug 28, 2026

Deskripsi masalah

Saat menggunakan Alibaba Cloud Object Storage Service (OSS), Anda mungkin tidak dapat menghapus bucket yang sudah tidak diperlukan lagi, baik melalui Konsol OSS maupun dengan menggunakan alat seperti kit pengembangan perangkat lunak (SDK) OSS atau ossutil. Pesan galat berikut mungkin muncul:

  • Saat menggunakan SDK OSS atau ossutil untuk menghapus bucket, pesan galat "The bucket you tried to delete is not empty" dikembalikan.

  • Saat menghapus bucket di Konsol OSS, pesan galat "The bucket is not empty. Check whether the bucket contains undeleted objects or incomplete multipart upload parts" dikembalikan.

Penyebab

Bucket yang ingin Anda hapus berisi objek, bagian (parts), LiveChannels, atau tugas unggah multi-bagian yang belum lengkap. Untuk mencegah penghapusan tidak disengaja, OSS tidak mengizinkan penghapusan bucket yang tidak kosong.

Solusi

Data tidak dapat dipulihkan setelah bucket dihapus. Sebelum menghapus bucket, pastikan data Anda telah dibackup. Kemudian, hapus semua objek, bagian, dan LiveChannels dari bucket tersebut. Ikuti langkah-langkah berikut untuk menghapus bucket:

Periksa file dan bagian yang belum dihapus

Untuk menghapus bucket tanpa file atau fragmen, ikuti langkah-langkah berikut:

  1. Masuk ke Konsol OSS.

  2. Di panel navigasi sebelah kiri, klik Buckets, lalu klik nama bucket yang dituju.

  3. Di tab Objects, periksa apakah ada file yang tersimpan.

    • Jika ada file, pilih satu atau beberapa file tersebut lalu klik Permanently Delete untuk menghapusnya. Anda juga dapat menggunakan ossutil untuk menghapus file tersebut. Untuk informasi lebih lanjut, lihat Menggunakan ossutil untuk menghapus bucket, file, dan bagian.

    • Jika tidak ada file, lanjutkan ke langkah berikutnya.

  4. Klik tab Part Management. Di halaman Parts, hapus file bagian tersebut.

    • Untuk menghapus semua file bagian dalam bucket, klik Delete All.

    • Untuk menghapus file bagian tertentu, pilih atau cari file bagian tersebut lalu klik Delete.

  5. Gunakan ossutil untuk menjalankan perintah berikut guna menghapus bucket. Jika galat "Bucket is not empty" masih muncul, lanjutkan ke langkah berikutnya.

    ./ossutil rm oss://[$Bucket_Name] -bar
    Catatan

    [$Bucket_Name] adalah nama bucket tersebut.

Periksa versi sebelumnya dari objek

Pengendalian versi adalah fitur perlindungan data di tingkat bucket. Setelah Anda mengaktifkan pengendalian versi, setiap penimpaan atau penghapusan objek akan disimpan sebagai versi sebelumnya. Jika Anda secara tidak sengaja menimpa atau menghapus objek, Anda dapat memulihkannya ke salah satu versi sebelumnya. Namun, saat melihat objek di konsol atau menggunakan alat tanpa menentukan nomor versi, hanya versi terbaru yang ditampilkan; versi sebelumnya tidak terlihat. Untuk menghapus versi sebelumnya dari objek, gunakan salah satu metode berikut:

Gunakan Konsol OSS

  1. Masuk ke Konsol OSS.

  2. Klik Buckets, lalu klik nama bucket yang dituju.

  3. Di panel navigasi sebelah kiri, pilih Content Security > Versioning dan periksa apakah fitur pengendalian versi diaktifkan. Jika fitur tersebut diaktifkan, lakukan langkah-langkah berikut untuk menghapus versi sebelumnya dari objek.

    1. Di panel navigasi kiri, pilih Object Management > Objects.

    2. Temukan versi sebelumnya dari objek yang tidak lagi diperlukan, lalu klik Permanently Delete di sebelah kanan.

    3. Klik OK.

  4. Setelah menyelesaikan langkah-langkah ini, coba hapus bucket lagi. Jika galat masih muncul, lanjutkan ke langkah berikutnya.

Gunakan ossutil

  1. Jalankan perintah berikut untuk memeriksa apakah pengendalian versi diaktifkan. Untuk informasi lebih lanjut, lihat bucket-versioning.

    ./ossutil bucket-versioning --method get oss://[$Bucket_Name]

    Output perintah yang mirip dengan berikut akan ditampilkan.

    bucket versioning status:Enabled
    • Jika pengendalian versi diaktifkan, hasilnya adalah `Enabled`. Jalankan perintah berikut untuk menghapus versi sebelumnya dari objek dalam bucket.

      ./ossutil rm oss://[$Bucket_Name]/ --all-versions -r

      Output perintah yang mirip dengan berikut akan ditampilkan.

    • Jika pengendalian versi dinonaktifkan, hasilnya adalah `Disable`.

  2. Setelah menyelesaikan langkah-langkah ini, coba hapus bucket lagi. Jika galat masih muncul, lanjutkan ke langkah berikutnya.

Periksa apakah terdapat LiveChannels di dalam bucket

Anda tidak dapat melihat atau menghapus LiveChannels di dalam bucket melalui konsol atau menggunakan alat. Anda dapat menggunakan operasi API atau SDK untuk melakukan operasi tersebut. Untuk informasi lebih lanjut, lihat DeleteLiveChannel. Contoh kode berikut disediakan sebagai referensi:

import java.util.List;
import com.alibaba.fastjson.JSON;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.CreateLiveChannelRequest;
import com.aliyun.oss.model.CreateLiveChannelResult;
import com.aliyun.oss.model.ListLiveChannelsRequest;
import com.aliyun.oss.model.LiveChannelGenericRequest;
import com.aliyun.oss.model.LiveChannelListing;
import com.aliyun.oss.model.LiveChannelStatus;
import com.aliyun.oss.model.LiveChannelTarget;
import com.aliyun.oss.model.LiveChannel;
import com.aliyun.oss.common.auth.*;

public class DeleteLiveChannel {
    private static String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";

    /**
     * Dapatkan kredensial akses dari variabel lingkungan.
     */
    private static final EnvironmentVariableCredentialsProvider CREDENTIALS_PROVIDER = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();

    private static String bucketName = "bucketname";
    
    public static void createLiveChannel() {

        // Buat instance OSSClient.
        // Saat instance OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepas sumber dayanya.
        String liveChannelName = "liveChannelName1";
        OSS oss = new OSSClientBuilder().build(endpoint, CREDENTIALS_PROVIDER);
        CreateLiveChannelRequest request = new CreateLiveChannelRequest(bucketName,
                liveChannelName, "desc", LiveChannelStatus.Enabled, new LiveChannelTarget());
        CreateLiveChannelResult result = oss.createLiveChannel(request);

        //Dapatkan URL ingest.
        List<String> publishUrls = result.getPublishUrls();
        for (String item : publishUrls) {
            System.out.println(item);
        }

        //Dapatkan URL pemutaran.
        List<String> playUrls = result.getPlayUrls();
        for (String item : playUrls) {
            System.out.println(item);
        }

        oss.shutdown();
    }
    public static void listLiveChannels() {
       

        // Buat instance OSSClient.
        OSS oss = new OSSClientBuilder().build(endpoint, CREDENTIALS_PROVIDER);

        ListLiveChannelsRequest request = new ListLiveChannelsRequest(bucketName);
        LiveChannelListing liveChannelListing = oss.listLiveChannels(request);
        List<LiveChannel> list = liveChannelListing.getLiveChannels();
        for(LiveChannel i:list){
            deleteLiveChannel(i.getName());
        }
        oss.shutdown();
    }
    public static void deleteLiveChannel(String liveChannelName) {

        // Buat instance OSSClient.
        OSS oss = new OSSClientBuilder().build(endpoint, CREDENTIALS_PROVIDER);
        LiveChannelGenericRequest request = new LiveChannelGenericRequest(bucketName, liveChannelName);
        System.out.println("Delete liveChannel "+liveChannelName+" Done");
        try {
            oss.deleteLiveChannel(request);
        } catch (OSSException ex) {
            ex.printStackTrace();
        } catch (ClientException ex) {
            ex.printStackTrace();
        } finally {
            oss.shutdown();
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        DeleteLiveChannel.listLiveChannels();
    }

}