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)); } } } }
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 + "]"); } } } }