Example #1
0
 private void getViewChild(int rootid, BasicVDisk beginDisk) {
   ArrayList childIdList = beginDisk.getChildList();
   ArrayList childDiskList = view.initor.mdb.getDiskFromQuerySql(rootid, childIdList);
   int size = childDiskList.size();
   for (int i = 0; i < size; i++) {
     BasicVDisk disk = (BasicVDisk) childDiskList.get(i);
     if (!disk.isView() && !disk.isOriDisk()) {
       getViewChild(rootid, disk);
     } else {
       if (disk.isView()) {
         viewList.add(new View(disk));
       }
     }
   }
 }
Example #2
0
  private void getSnapAndViewFromVolInfo(ArrayList svList, int rootid, int tid) {
    int j, k, l, size1, size2, size3, local_snap_id;
    SnapWrapper snap;
    Snapshot newSnap;
    View viewObj;
    BasicVDisk directChild;

    ArrayList snapList = view.initor.mdb.getSnapWrapperListFromQuerySql(rootid);
    size1 = snapList.size();
    for (j = 0; j < size1; j++) {
      snap = (SnapWrapper) snapList.get(j);
      SanBootView.log.debug(
          getClass().getName(),
          " snap:["
              + snap.snap.getSnap_root_id()
              + "."
              + snap.snap.getSnap_local_snapid()
              + "] tid: "
              + tid);
      // 先更新一下snap's child list
      newSnap =
          view.initor.mdb.getSnapshotFromQuerySql(
              snap.snap.getSnap_root_id(), snap.snap.getSnap_local_snapid());
      if (newSnap != null) {
        snap.snap.setSnap_child_list(newSnap.getSnap_child_list());
      } else {
        SanBootView.log.error(
            getClass().getName(),
            "Not found snapshot from vsnap db: ["
                + snap.snap.getSnap_root_id()
                + "."
                + snap.snap.getSnap_local_snapid()
                + "]");
      }

      // 获取树上从该快照开始所有的 view 节点
      viewList.clear();
      getViewChild(snap.snap.getSnap_root_id(), snap.snap);
      size2 = viewList.size();
      SanBootView.log.debug(
          getClass().getName(),
          " Child of view from this snap node on tree: ["
              + snap.snap.getSnap_root_id()
              + "."
              + snap.snap.getSnap_local_snapid()
              + "]");
      SanBootView.log.debug(getClass().getName(), "===========================");
      for (k = 0; k < size2; k++) {
        viewObj = (View) viewList.get(k);
        SanBootView.log.debug(
            getClass().getName(),
            " view local_snap_id: "
                + viewObj.getSnap_local_snapid()
                + " view target_id: "
                + viewObj.getSnap_target_id());
      }
      SanBootView.log.debug(getClass().getName(), "===========================\r\n");

      svList.add(snap);

      // 根据该快照的子节点来判断直属于它的view
      ArrayList directChildList = snap.snap.getChildList();
      size3 = directChildList.size();
      for (l = 0; l < size3; l++) {
        local_snap_id = ((Integer) directChildList.get(l)).intValue();
        directChild = view.initor.mdb.getVDisk(snap.snap.getSnap_root_id(), local_snap_id);
        if (directChild != null) {
          viewObj = null;
          if (directChild.isSnap()) {
            viewObj = searchViewList(directChild.getSnap_target_id());
          } else { // direct child is view or disk
            if (directChild.isView()) {
              if (directChild.getSnap_target_id() != snap.snap.getSnap_target_id()) {
                viewObj = new View(directChild);
              }
            }
          }

          if (viewObj != null) {
            svList.add(new ViewWrapper(viewObj));
            SanBootView.log.debug(
                getClass().getName(),
                " Found direct view: ["
                    + viewObj.getSnap_root_id()
                    + "."
                    + viewObj.getSnap_local_snapid()
                    + "]");
          }
        } else {
          SanBootView.log.error(
              getClass().getName(),
              " Not found disk from vsnap db: ["
                  + snap.snap.getSnap_root_id()
                  + "."
                  + local_snap_id
                  + "]");
        }
      }
    }
  }