Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6e10088c authored by Junyu Lai's avatar Junyu Lai Committed by Automerger Merge Worker
Browse files

Merge "Read files in increasing timestamp order in FileRotator" into main am:...

Merge "Read files in increasing timestamp order in FileRotator" into main am: fe3deb07 am: 0e4bad82

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2674875



Change-Id: Ied650e4adb62ffe2fa722f38c5384b68a644200b
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 8829ac54 0e4bad82
Loading
Loading
Loading
Loading
+17 −7
Original line number Original line Diff line number Diff line
@@ -19,6 +19,9 @@ package com.android.internal.util;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.os.FileUtils;
import android.os.FileUtils;
import android.util.Log;
import android.util.Log;
import android.util.Pair;

import libcore.io.IoUtils;


import java.io.BufferedInputStream;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedOutputStream;
@@ -28,12 +31,12 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStream;
import java.util.Comparator;
import java.util.Objects;
import java.util.Objects;
import java.util.TreeSet;
import java.util.zip.ZipEntry;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import java.util.zip.ZipOutputStream;


import libcore.io.IoUtils;

/**
/**
 * Utility that rotates files over time, similar to {@code logrotate}. There is
 * Utility that rotates files over time, similar to {@code logrotate}. There is
 * a single "active" file, which is periodically rotated into historical files,
 * a single "active" file, which is periodically rotated into historical files,
@@ -302,18 +305,25 @@ public class FileRotator {
    public void readMatching(Reader reader, long matchStartMillis, long matchEndMillis)
    public void readMatching(Reader reader, long matchStartMillis, long matchEndMillis)
            throws IOException {
            throws IOException {
        final FileInfo info = new FileInfo(mPrefix);
        final FileInfo info = new FileInfo(mPrefix);
        final TreeSet<Pair<Long, String>> readSet = new TreeSet<>(
                Comparator.comparingLong(o -> o.first));
        for (String name : mBasePath.list()) {
        for (String name : mBasePath.list()) {
            if (!info.parse(name)) continue;
            if (!info.parse(name)) continue;


            // read file when it overlaps
            // Add file to set when it overlaps.
            if (info.startMillis <= matchEndMillis && matchStartMillis <= info.endMillis) {
            if (info.startMillis <= matchEndMillis && matchStartMillis <= info.endMillis) {
                if (LOGD) Log.d(TAG, "reading matching " + name);
                readSet.add(new Pair(info.startMillis, name));
            }
        }


        // Read files in ascending order of start timestamp.
        for (Pair<Long, String> pair : readSet) {
            final String name = pair.second;
            if (LOGD) Log.d(TAG, "reading matching " + name);
            final File file = new File(mBasePath, name);
            final File file = new File(mBasePath, name);
            readFile(file, reader);
            readFile(file, reader);
        }
        }
    }
    }
    }


    /**
    /**
     * Return the currently active file, which may not exist yet.
     * Return the currently active file, which may not exist yet.
+11 −10
Original line number Original line Diff line number Diff line
@@ -366,6 +366,16 @@ public class FileRotatorTest extends AndroidTestCase {
        assertReadAll(rotate, "bar");
        assertReadAll(rotate, "bar");
    }
    }


    public void testReadSorted() throws Exception {
        write("rotator.1024-2048", "2");
        write("rotator.2048-4096", "3");
        write("rotator.512-1024", "1");

        final FileRotator rotate = new FileRotator(
                mBasePath, PREFIX, SECOND_IN_MILLIS, SECOND_IN_MILLIS);
        assertReadAll(rotate, "1", "2", "3");
    }

    public void testFileSystemInaccessible() throws Exception {
    public void testFileSystemInaccessible() throws Exception {
        File inaccessibleDir = null;
        File inaccessibleDir = null;
        String dirPath = getContext().getFilesDir() + File.separator + "inaccessible";
        String dirPath = getContext().getFilesDir() + File.separator + "inaccessible";
@@ -422,16 +432,7 @@ public class FileRotatorTest extends AndroidTestCase {
        }
        }


        public void assertRead(String... expected) {
        public void assertRead(String... expected) {
            assertEquals(expected.length, mActual.size());
            assertEquals(Arrays.asList(expected), mActual);

            final ArrayList<String> actualCopy = new ArrayList<String>(mActual);
            for (String value : expected) {
                if (!actualCopy.remove(value)) {
                    final String expectedString = Arrays.toString(expected);
                    final String actualString = Arrays.toString(mActual.toArray());
                    fail("expected: " + expectedString + " but was: " + actualString);
                }
            }
        }
        }
    }
    }
}
}